#include "calcul.hpp"

#include "Core/CalculateurReussite.hpp"

#include "Core/OptimiseurEquipement.hpp"

#include <QtCore/QDebug>

Calcul::Calcul(QWidget *parent)
    : QWidget(parent),
      testContrats( "SoloInc", "RTEwWtyB7oCYUHGbWjkH", "contracts", this ),
      testMonstres( "SoloInc", "RTEwWtyB7oCYUHGbWjkH", "monsters", this ),
      Compteur( 0u )
{
    // http://www.croquemonster.com/api/agency.xml?name=SoloInc;pass=RTEwWtyB7oCYUHGbWjkH

    QObject::connect( &testContrats, SIGNAL( infosPretes() ),
                      this, SLOT( coucou() ) );
    QObject::connect( &testMonstres, SIGNAL( infosPretes() ),
                      this, SLOT( coucou() ) );

    testContrats.chargeInformations( "" );
    testMonstres.chargeInformations( "" );
}

Calcul::~Calcul()
{}

void Calcul::coucou()
{
    if ( ++Compteur < 2 )
    {
        qDebug() << "Compteur vaut :" << Compteur;
        return;
    }
    qDebug() << "Compteur vaut :" << Compteur;

    qDebug() << trUtf8( "Reçu signal que les infos sont prêtes!" );

    CalculateurReussite Calculateur;
    OptimiseurEquipement Optimiseur;

    QHashIterator< unsigned, XmlInfoContrat* > iterateur( testContrats.infosContrats() );

    if ( iterateur.hasNext() )
    {
        iterateur.next();
        iterateur.value() -> afficheInstance();
    }

    QHashIterator< unsigned, XmlInfoMonstre* > iterateurBis( testMonstres.infosMonstres() );

    QHash< EnumCaracteristique, unsigned > details;

    while ( iterateurBis.hasNext() )
    {
        iterateurBis.next();
        if ( iterateurBis . value() -> specialisteMbl() ) continue;
        qDebug() << "---------------------------------------------------";
        iterateurBis.value() -> afficheInstance();
        qDebug() << QObject::trUtf8( "Probabilité : %1 \%." ).arg( Calculateur( *iterateur.value(),
                                                                                *iterateurBis.value(),
                                                                                details ) );
        qDebug() << details;

        Optimiseur( *iterateur.value(), *iterateurBis.value() );
    }
}
